/*
 * Copyright (c) 2007 centrevillage <centrevillage@gmail.com>
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

#ifndef  __SEQ_FUNCTIONS_HPP__
#define  __SEQ_FUNCTIONS_HPP__

// ravi
#include "types.hpp"

//namespace seq {
//    class NoteEvent;
//    class TempoChEvent;
//    class SysExEvent;
//    class Event;
//}

namespace ravi {

val_t seq_load(arg_t& argv); 
val_t seq_play(arg_t& argv); 
val_t seq_stop(arg_t& argv); 
val_t seq_addnotes(arg_t& argv); 
val_t seq_addtempo(arg_t& argv);
val_t seq_addctrls(arg_t& argv);
val_t seq_addex(arg_t& argv);
val_t seq_setreso(arg_t& argv);
val_t seq_getreso(arg_t& argv);
val_t seq_setch(arg_t& argv);
val_t seq_getch(arg_t& argv);
val_t seq_deltempo(arg_t& argv);
val_t seq_delnote(arg_t& argv);
val_t seq_delctrl(arg_t& argv);
val_t seq_delex(arg_t& argv);
val_t seq_deltempoR(arg_t& argv);
val_t seq_delnoteR(arg_t& argv);
val_t seq_delctrlR(arg_t& argv);
val_t seq_delexR(arg_t& argv);
val_t seq_gettempoR(arg_t& argv);
val_t seq_getnoteR(arg_t& argv);
val_t seq_getctrlR(arg_t& argv);
val_t seq_getexR(arg_t& argv);
val_t seq_playtick(arg_t& argv);
val_t seq_playtime(arg_t& argv);
val_t native_sleep(arg_t& argv);
val_t seq_is_playend(arg_t& argv);
val_t seq_setdevice(arg_t& argv);
val_t seq_devices(arg_t& argv);
val_t seq_waitplayend(arg_t& argv);
val_t seq_save(arg_t& argv);
val_t seq_def_one_value_event(arg_t& argv);
val_t seq_def_note_value_event(arg_t& argv);
val_t seq_def_text_value_event(arg_t& argv);
val_t seq_addevents(arg_t& argv);
val_t seq_getevents(arg_t& argv);
val_t seq_delevents(arg_t& argv);
val_t seq_setinitevent(arg_t& argv);
val_t seq_getinitevent(arg_t& argv);
val_t seq_delinitevent(arg_t& argv);
val_t seq_category(arg_t& argv);
val_t seq_eventid(arg_t& argv);
val_t seq_reg_vstplugin(arg_t& argv);
val_t seq_load_vstplugin(arg_t& argv);
val_t seq_track_num_from_category(arg_t& argv);
val_t seq_type_id_from_category(arg_t& argv);
val_t seq_control_id_from_category(arg_t& argv);
val_t seq_lsb_from_category(arg_t& argv);
val_t seq_msb_from_category(arg_t& argv);
val_t seq_resetundo(arg_t& argv);
val_t seq_newproj(arg_t& argv);
val_t seq_playloop(arg_t& argv); 

//inline void exec_addnote(unsigned char trkno, unsigned tick, seq::NoteEvent* pEvent);
//inline void exec_addtempo(unsigned tick, seq::TempoChEvent* pEvent);
//inline void exec_addctrl(unsigned char trkno, unsigned tick, seq::Event* pEvent);
//inline void exec_addex(unsigned tick, seq::SysExEvent* pEvent);
//inline void exec_delnote(unsigned char trkno, unsigned tick, const seq::NoteEvent& event);
//inline void exec_deltempo(unsigned tick, const seq::TempoChEvent& event);
//inline void exec_delctrl(unsigned char trkno, unsigned tick, const seq::Event& event);
//inline void exec_delex(unsigned tick, const seq::SysExEvent& event);
//inline void exec_delnoteR(unsigned char trkno, unsigned tick_s, unsigned tick_e);
//inline void exec_deltempoR(unsigned tick_s, unsigned tick_e);
//inline void exec_delctrlR(unsigned char trkno, unsigned tick_s, unsigned tick_e);
//inline void exec_delexR(unsigned tick_s, unsigned tick_e);
//inline void exec_addevent(ListCategory category, unsigned tick, seq::Event* pEvent);
//inline void exec_delevent(ListCategory category, const seq::Event& event);
//inline void exec_deleventR(ListCategory category, unsigned tick_s, unsigned tick_e);
//inline void exec_setinitievent(ListCategory category, seq::Event* pEvent);
//inline void exec_delinitievent(ListCategory category);

}		/* -----  end of namespace  ravi  ----- */

#endif   /* ----- #ifndef __SEQ_FUNCTIONS_HPP__  ----- */
